/**
 * created by 小卷毛, 2020/12/9
 * Copyright (c) 2020, 416143467@qq.com All Rights Reserved.
 * #                   *********                            #
 * #                  ************                          #
 * #                  *************                         #
 * #                 **  ***********                        #
 * #                ***  ****** *****                       #
 * #                *** *******   ****                      #
 * #               ***  ********** ****                     #
 * #              ****  *********** ****                    #
 * #            *****   ***********  *****                  #
 * #           ******   *** ********   *****                #
 * #           *****   ***   ********   ******              #
 * #          ******   ***  ***********   ******            #
 * #         ******   **** **************  ******           #
 * #        *******  ********************* *******          #
 * #        *******  ******************************         #
 * #       *******  ****** ***************** *******        #
 * #       *******  ****** ****** *********   ******        #
 * #       *******    **  ******   ******     ******        #
 * #       *******        ******    *****     *****         #
 * #        ******        *****     *****     ****          #
 * #         *****        ****      *****     ***           #
 * #          *****       ***        ***      *             #
 * #            **       ****        ****                   #
 */
package com.sgcc.pda.lib_tools_database.factory;

import android.text.TextUtils;
import android.util.Log;

import com.sgcc.pda.lib_tools_database.bean.ticket.LocalImage;
import com.sgcc.pda.lib_tools_database.bean.ticket.TicketDetail;
import com.sgcc.pda.lib_tools_database.bean.ticket.TicketDetailPlan;
import com.sgcc.pda.lib_tools_database.gen.DaoSession;
import com.sgcc.pda.lib_tools_database.gen.TicketDetailDao;
import com.sgcc.pda.lib_tools_database.gen.TicketDetailPlanDao;
import com.sgcc.pda.tools.JsonUtils;

import org.greenrobot.greendao.Property;

import java.util.List;

/**
 * 描 述：离线工作票操作类
 * 作 者：小卷毛  2020-12-09 14:40
 * 修改描述：修改插入逻辑，增加表字段
 * 修 改 人：
 * 修改版本：v1.2.1
 */
public class TicketDetailImpl extends Abstractable<TicketDetail, TicketDetailDao> {

    @Override
    public TicketDetailDao getDao(DaoSession session) {
        return session.getTicketDetailDao();
    }

    @Override
    public void insertList(List<TicketDetail> list) {
        if (list != null && list.size() > 0) {
            for (TicketDetail item : list) {
                if (!TextUtils.isEmpty(item.getRECORD_ID()))
                    insert(item);
            }
        }
    }

    /**
     * 插入工作票详情列表数据
     *
     * @param list   详情列表
     * @param userId 当前用户ID
     */
    public void insertList(List<TicketDetail> list, String userId) {
        if (list != null && list.size() > 0) {
            for (TicketDetail item : list) {
                if (!TextUtils.isEmpty(item.getRECORD_ID()))
                    insert(item, userId);
            }
        }
    }

    /**
     * 插入工作票详情数据
     *
     * @param bean   详情
     * @param userId 当前用户ID
     */
    public void insert(TicketDetail bean, String userId) {
        if (bean != null) {
            // 查询本地工作票信息
            TicketDetail localBean = findData(
                    TicketDetailDao.Properties.RECORD_ID,
                    bean.getRECORD_ID()
            );

            if (localBean != null) {
                int versionOld = Integer.parseInt(localBean.getVERSION());
                int versionNew = Integer.parseInt(bean.getVERSION());

                if (versionOld >= versionNew) {
                    // 本地有数据，且版本号相等则不做操作
                    Log.i("insert", "本地有高版本数据，不做操作！");

                    // String 转 list
                    if (!TextUtils.isEmpty(localBean.getSM_PERSON_STRING())) {
                        localBean.setSM_PERSON(
                                JsonUtils.toList(
                                        localBean.getSM_PERSON_STRING(),
                                        TicketDetail.PersonHead.class
                                )
                        );
                    }

                    // 判断本地是否存在 SM_PERSON 值
                    if (localBean.getSM_PERSON() != null
                            && localBean.getSM_PERSON().size() > 0) {
                        // 本地保存数据的UID是否一致，不同则更新本地
                        if (!userId.equals(localBean.getSM_PERSON().get(0).getHEAD_ID())) {
                            // 网络数据是否存在 SM_PERSON 值
                            if (bean.getSM_PERSON() != null
                                    && bean.getSM_PERSON().size() > 0) {
                                // 保存当前用户ID
                                bean.getSM_PERSON().get(0).setHEAD_ID(userId);
                                // 字段赋值
                                localBean.setSM_PERSON_STRING(JsonUtils.toJson(bean.getSM_PERSON()));
                            } else {
                                // 字段赋值
                                localBean.setSM_PERSON_STRING("[]");
                            }
                            // 更新本地数据
                            update(localBean);

                            Log.i("insert", "本地有高版本数据，只更新SM_PERSON！");
                        }
                    } else {
                        // 网络数据是否存在 SM_PERSON 值
                        if (bean.getSM_PERSON() != null
                                && bean.getSM_PERSON().size() > 0) {
                            // 保存当前用户ID
                            bean.getSM_PERSON().get(0).setHEAD_ID(userId);
                            // 字段赋值
                            localBean.setSM_PERSON_STRING(JsonUtils.toJson(bean.getSM_PERSON()));
                            // 更新本地数据
                            update(localBean);

                            Log.i("insert", "本地有高版本数据，没有SM_PERSON数据！");
                        }
                    }
                    return;
                }
            }

            if (localBean != null) {
                // 删除本地计划信息
                List<TicketDetailPlan> localChild = new TicketDetailPlanImpl().findByParam(
                        new Property[]{TicketDetailPlanDao.Properties.PARENT_ID},
                        new String[]{localBean.getRECORD_ID()}
                );
                if (localChild != null && localChild.size() > 0) {
                    new TicketDetailPlanImpl().delete(localChild);
                }

                // 删除本地工作票信息
                delete(localBean);
            }

            // 防范措施列表
            if (bean.getMEASURE() != null)
                bean.setMEASURE_STRING(JsonUtils.toJson(bean.getMEASURE()));

            // 视频列表
            if (bean.getVIDEO_LIST() != null)
                bean.setVIDEO_LIST_STRING(JsonUtils.toJson(bean.getVIDEO_LIST()));

            // 设备列表
            if (bean.getVIDEO_DEVICES() != null)
                bean.setVIDEO_DEVICES_STRING(JsonUtils.toJson(bean.getVIDEO_DEVICES()));

            // 班组成员列表
            if (bean.getWT_PERSON_LIST() != null)
                bean.setWT_PERSON_LIST_STRING(JsonUtils.toJson(bean.getWT_PERSON_LIST()));

            // 风险点列表
            if (bean.getRISK_LIST() != null)
                bean.setRISK_LIST_STRING(JsonUtils.toJson(bean.getRISK_LIST()));

            // 题库列表
            if (bean.getQST_LIST() != null)
                bean.setQST_LIST_STRING(JsonUtils.toJson(bean.getQST_LIST()));

            // 成员列表
            if (bean.getSM_PERSON() != null) {
                // 保存当前用户ID
                if (bean.getSM_PERSON().size() > 0)
                    bean.getSM_PERSON().get(0).setHEAD_ID(userId);

                bean.setSM_PERSON_STRING(JsonUtils.toJson(bean.getSM_PERSON()));
            }

            // 插入计划信息
            List<TicketDetailPlan> items = bean.getWORK_PLAN_FORM();
            if (items != null && items.size() > 0) {
                for (TicketDetailPlan inner : items) {
                    if (inner != null) {
                        inner.setPARENT_ID(bean.getRECORD_ID());
                        if (inner.getAPP_CODE() == null) inner.setAPP_CODE("");
                        if (inner.getWORK_FROM() == null) inner.setWORK_FROM("");
                        if (inner.getWORK_TYPE_NO() == null) inner.setWORK_TYPE_NO("");
                    }
                }
                new TicketDetailPlanImpl().insertList(items);
            }

            // 插入客户方网络图片
            if ("04".equals(bean.getWT_STATE())
                    && !TextUtils.isEmpty(bean.getATTACH_SRC())) {
                LocalImage item = new LocalImage();
                item.setParentId(bean.getRECORD_ID());
                item.setAttachMode("1");
                item.setAttachStatus("03");
                item.setAttachType("01");
                item.setAttachSrc(bean.getATTACH_SRC());
                item.setWtPersonType("07");
                item.setWtSignPattern("01");

                new LocalImageImpl().insert(item);
            }

            // 插入供电方网络图片
            if ("04".equals(bean.getWT_STATE())
                    && !TextUtils.isEmpty(bean.getWT_ATTACH_SRC())) {
                LocalImage item = new LocalImage();
                item.setParentId(bean.getRECORD_ID());
                item.setAttachMode("1");
                item.setAttachStatus("03");
                item.setAttachType("01");
                item.setAttachSrc(bean.getWT_ATTACH_SRC());
                item.setWtPersonType("03");
                item.setWtSignPattern("01");

                new LocalImageImpl().insert(item);
            }

            // 插入工作票信息
            insert(bean);
        }
    }

    /**
     * 根据工作票ID删除本地数据
     */
    public void deleteById(String recordId) {
        if (!TextUtils.isEmpty(recordId)) {
            // 查询本地工作票信息
            TicketDetail localBean = findData(
                    TicketDetailDao.Properties.RECORD_ID, recordId);

            if (localBean != null) {
                // 删除本地计划信息
                List<TicketDetailPlan> localChild = new TicketDetailPlanImpl().findByParam(
                        new Property[]{TicketDetailPlanDao.Properties.PARENT_ID},
                        new String[]{localBean.getRECORD_ID()}
                );
                if (localChild != null && localChild.size() > 0) {
                    new TicketDetailPlanImpl().delete(localChild);
                }

                // 删除本地工作票信息
                delete(localBean);
            }
        }
    }

    /**
     * 更新数据库表
     */
    public void update(TicketDetail bean) {
        // 班组成员列表
        if (bean.getWT_PERSON_LIST() != null)
            bean.setWT_PERSON_LIST_STRING(JsonUtils.toJson(bean.getWT_PERSON_LIST()));

        mCommonDaoUtils.update(bean);
    }

}
